/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package co.srm.manejadores;

import co.srm.dao.JPAGenericDAO;
import co.srm.entidades.Cliente;
import co.srm.entidades.Cobrador;
import co.srm.entidades.Pago;
import co.srm.entidades.Prestamo;
import co.srm.entidades.Usuario;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 *
 * @author TilZon
 */
public class ManejadorPago {

    private JPAGenericDAO<Pago> daoPago;

    public ManejadorPago() {
        this.daoPago = new JPAGenericDAO<Pago>(Pago.class);
    }

    public boolean crearPago(String idStr, String abonop, Date fecha, Cliente cliente, Cobrador cobrador, Prestamo prestamo, Usuario usuario, boolean editar) {
        Pago pago = null;
        Double abono = 0.0;
        Long id = null;
        boolean hacerPago = false;
        boolean estado = false;

//        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//        String datetime=dateFormat.format(fecha);
//        Date fechayHora=null;

        try {
            abono = Double.parseDouble(abonop);
//            fechayHora=dateFormat.parse(datetime);
            if (editar) {
                id = Long.parseLong(idStr);
            }
        } catch (Exception e) {
            return false;
        }

        if (idStr == null) {
            Double saldoActual = prestamo.getSaldoActual();
            Date fechaPrestamo = prestamo.getFecha();
            int plazo=prestamo.getPlazo();

            long fechaInicialMs = fechaPrestamo.getTime();
            long fechaFinalMs = fecha.getTime();
            long diferencia = fechaFinalMs - fechaInicialMs;
            double dias = Math.floor(diferencia / (1000 * 60 * 60 * 24));
            int diasTranscuridos=(int)dias;

            if(diasTranscuridos>plazo)//Verificamos que los dias transcuridos no superen al plazo del prestamo
            {
               prestamo.setEstadoActual(Prestamo.EstadoActual.VENCIDO);
            }



            if (saldoActual >= abono) {
                saldoActual -= abono;
                hacerPago = true;
            }

            if (saldoActual == 0) {
                prestamo.setEstadoActual(Prestamo.EstadoActual.SALDADO);
            }

            prestamo.setSaldoActual(saldoActual);

            pago = new Pago();
            pago.setAbono(abono);
            pago.setCliente(cliente);
            pago.setCobrador(cobrador);
            pago.setFecha(fecha);
            pago.setPrestamo(prestamo);
            pago.setUsuario(usuario);


        }
        if (hacerPago) {
            estado = daoPago.save(pago);
        }


        return estado;
    }


    public boolean actualizarPago(Pago p)
    {
     boolean estado= daoPago.save(p);

     return estado;
    }

     public boolean eliminarPago(long id){
      boolean estado = daoPago.remove(id);
      return estado;
    }
}


